Contents
  1. 1. Introduction
  2. 2. 概述
  3. 3. 持久化
  4. 4. 关系型数据库
  5. 5. Oject-Relational Impedance Mismatch
    1. 5.1. 颗粒度(Granularity)
    2. 5.2. 子类(Subtypes [inheritance])
    3. 5.3. Identity
    4. 5.4. 关联(Association)
    5. 5.5. 数据导航(Data navigation)
  6. 6. 参考链接
  7. 7. OVER

Introduction

什么是ORM,引用wikipedia

Object-relational mapping (ORM, O/RM, and O/R mapping)

概述

在计算机学科中,他是用来在不兼容的系统类型(incompatible type systems)和面向对象的编程语言(object-oriented programming laguages)之间进行数据转化(converting data)的一种编程技术。

在面向对象的程序设计中,数据管理任务往往以对象实现,这些对象往往不是纯数字的值。

而常用的数据库只能以表的结构存储基本类型,例如:整形和字符串等。

所以,程序员要么把对象转换成一组基本类型的数据,以便数据库存储;要么在程序中就使用基本类型数据。ORM就是第一种实现方法。

核心问题是:将逻辑对象转换为可存储的原子形式,同时保护对象属性以及他们之间的关系,以便在需要时恢复成对象。 如果这种存储重组功能实现的话,对象就可以说是能够被持久化

持久化

所谓持久化就是,你希望数据存活范围超过程序本身。对于java来说,就是数据存储于JVM以外,以便后溪重新获取这些数据。

关系型数据库

ORM主要面向的是关系型数据库(RDBMS),尽管在面向对象技术中,和关系数据库对应的是面向对象的数据库(object database:ODBMS)。但是在可预见的未来,关系数据库仍旧占据着一席之地。

Oject-Relational Impedance Mismatch

有时也称作paradigm mismatch。是对象模型和关系模型不能良好匹配的一种说法。RDBMS使用表结构表示数据,而像java这种面向对象语言使用对象及其关系进行表示。在关系数据库中存储和获取这些对象和它们的关系会遇到五个问题:(还没看懂,详情参考原文

颗粒度(Granularity)

有时一个对象模型对应的类要比数据库中相应的表要多得多。

子类(Subtypes [inheritance])

在面向对象语言中很常见。但是RDBMS没有相应的支持。

Identity

RDBMS定义了千篇一律的的概念:主键。而java中既有唯一概念又有相等概念。

关联(Association)

面向对象语言中的关系并不直接。而RDBMS中直接使用外检进行说明。

数据导航(Data navigation)

在java中,可以根据对象关联根据一个对象找到另一个对象。而在数据库中,是使用尽量少的SQL语句和JOINs,然后从中获得所需对象。

参考链接

OVER

Contents
  1. 1. Introduction
  2. 2. 概述
  3. 3. 持久化
  4. 4. 关系型数据库
  5. 5. Oject-Relational Impedance Mismatch
    1. 5.1. 颗粒度(Granularity)
    2. 5.2. 子类(Subtypes [inheritance])
    3. 5.3. Identity
    4. 5.4. 关联(Association)
    5. 5.5. 数据导航(Data navigation)
  6. 6. 参考链接
  7. 7. OVER